home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Scene Storm
/
Scene Storm - Volume 1.iso
/
coding
/
asm
/
utils
/
paddle
/
paddle.alp
< prev
next >
Wrap
Text File
|
1980-01-03
|
5KB
|
214 lines
;*
;
; ### Paddle routines by JM v 0.50 ###
;
; - Created 900715 by JM -
;
;
; This program reads paddles connected to mouse port #2.
;
;
; Bugs: yet unknown
;
;
; Edited:
;
; - 900715 by JM -> v0.01 - Basics from vertb.asm.
; - 900716 by JM -> v0.02 - Should work but worketh not.
; - 900717 by JM -> v0.50 - Worketh. Needed a call to WritePotgo().
;
;
include "bb.i"
include "exec/types.i"
include "exec/execbase.i"
include "exec/tasks.i"
include "exec/nodes.i"
include "exec/memory.i"
include "exec/io.i"
include "exec/interrupts.i"
include "hardware/intbits.i"
include "hardware/custom.i"
include "libraries/dos.i"
OUTRY equ 1<<15
DATRY equ 1<<14
OUTRX equ 1<<13
DATRX equ 1<<12
OUTLY equ 1<<11
DATLY equ 1<<10
OUTLX equ 1<<9
DATLX equ 1<<8
START equ 1
STRUCTURE mv_VERTB,0 ; oma muuttuja-alue
APTR mv_maintask ; paaohjelman task-osoite
APTR mv_potgores ; resourcen osoite
ULONG mv_sigmask ; signaalimaski
UWORD mv_potdata ; luettu data
UWORD mv_firedata ; nappuloiden tilat
LABEL mv_SIZE ; struktuurin koko
.var global
dlibb Dos,Potgo
dl potbits
db VERTB_signal,int_added
.share mem,#MEMF_CLEAR!MEMF_PUBLIC
dm interrupt[IS_SIZE]
dm data[mv_SIZE]
dm buffer[256]
main .begin
ra
st VERTB_signal ; lippu: sigbit ei varattu
openlib Dos,cleanup
lea.s "potgo.resource",a1
moveq #0,d0
call OpenResource ; avataan potgo.resource
move.l d0,.PotgoBase
beq cleanup
move.l #OUTRY|DATRY|OUTRX|DATRX|START,d0 ; tarvittavat bitit
move.l d0,d2
call AllocPotBits
move.l d0,potbits ; varatut bitit
cmp.l d0,d2
bne cleanup ; ei saatu kaikkia bittejä
share mem,cleanup ; varataan muisti
move.l data,a2 ; muuttuja-alueen osoite
moveq #-1,d0 ; mika tahansa bitti kelpaa
call AllocSignal ; varataan signaali
move.b d0,VERTB_signal ; tallennetaan bitin nro
moveq #0,d1
bset d0,d1 ; asetetaan sigbit-bitti
move.l d1,mv_sigmask(a2) ; tallennetaan signaalimaski
move.l .PotgoBase,mv_potgores(a2) ; resourcen osoite
sub.l a1,a1
call FindTask ; etsitaan oma task
move.l d0,mv_maintask(a2) ; osoite muuttujatilaan
move.l interrupt,a1 ; Interrupt-struktuuri
move.b #NT_INTERRUPT,LN_TYPE(a1) ; noden tyyppi = INTERRUPT
move.b #1,LN_PRI(a1) ; noden prioriteetti = 1
lea intr_name(pc),a0 ; noden nimi
move.l a0,LN_NAME(a1) ; nimen osoite struktuuriin
lea.l irqcode(pc),a0 ; keskeytysrutiinin osoite
move.l a0,IS_CODE(a1) ; osoite struktuuriin
move.l a2,IS_DATA(a1) ; muuttuja-alueen osoite
moveq #INTB_VERTB,d0 ; keskeytyksen tyyppi
call AddIntServer ; käynnistetään keskeytys
st int_added
loop moveq #0,d0
move.b VERTB_signal,d1 ; odotetaan keskeytyksen
bset d1,d0 ; antamaa signaalia
moveq #SIGBREAKB_CTRL_C,d1 ; ja CTRL+C:n painamista
bset d1,d0
call Wait ; ohjelma nukkumaan
btst #SIGBREAKB_CTRL_C,d0
bne cleanup
moveq #0,d0
moveq #0,d1
moveq #0,d2
move.l data,a2
move.b mv_potdata(a2),d0
move.b mv_potdata+1(a2),d1
move.w mv_firedata(a2),d2
lea.s " Paddle value: %3.3d %3.3d Fire: %02.2x",13,a0
move.w d2,-(sp)
move.w d1,-(sp)
move.w d0,-(sp)
move.l sp,a1
lea.l putch(pc),a2 ; putchar-rutiinin osoite
move.l buffer,a3 ; tulostuspuskuri
call RawDoFmt ; formatoidaan tulostus
addq.l #6,sp ; sp takaisin kohdalleen
move.l a3,d2
sub.l d2,d7 ; lasketaan rivin pituus
move.l d7,d3
call Output ; tulostustiedosto
move.l d0,d1
beq.s cleanup ; nolla -> ei voida tulostaa
fcall Write ; tulostus
bra loop
putch move.b d0,(a3)+
move.l a3,d7
rts
cleanup tst.b int_added ; keskeytysrutiini
.if ne ; toiminnassa?
move.l interrupt,a1
moveq #INTB_VERTB,d0
call RemIntServer ; poistetaan keskeytykset
.end
moveq #0,d0
move.b VERTB_signal,d0 ; vapautetaan signaalibitti
.if pl ; jos se oli varattu
call FreeSignal
.end
move.l potbits,d0
.if ne
call FreePotBits
.end
freesh mem ; vapautetaan muisti
closlib Dos
moveq #0,d0 ; virhekoodi = 0
.end
irqcode lea $dff000,a0 ; custom-piirit
move.w pot1dat(a0),mv_potdata(a1) ; luetaan paddle
move.w joy1dat(a0),d0 ; painikkeet
move.w d0,d1
lsr.w #1,d1
and.w #$0101,d1 ; muut bitit pois
eor.w d1,d0
move.w d0,d1
and.w #$0003,d0 ; taas liiat pois
and.w #$0300,d1 ; tästä myös
lsr.w #6,d1 ; molemmat tavut samaan
or.b d1,d0
move.w d0,mv_firedata(a1) ; nappuloiden tilat
move.l mv_potgores(a1),a5 ; potgo base talteen
move.l mv_sigmask(a1),d0 ; signaalimaski
move.l mv_maintask(a1),a1 ; taski
call Signal ; annetaan signaali
move.l a5,a6 ; potgo base
moveq #1,d0
moveq #1,d1 ; käynnistetään uusi muunnos
fcall WritePotgo
moveq #0,d0 ; tieto Execille, että
rts ; keskeytysketju voi jatkua
intr_name:
dc.b 'My_Paddle_Intr',0 ; keskeytyksen nimi
.purge
end